#include <iostream>

using namespace std;
/*
	1.C语言：通过函数的返回值(由程序员人为规定返回值含义)来判断处理异常
	  int fd=open(某个文件,权限);
	  if(fd==-1)
		  失败了
	2.C++新增try catch语句去捕捉处理异常
		 使用throw抛出(引发)异常
	3.注意
		throw 抛出来的异常类型
		catch捕捉的时候，参数类型需要保持一致，如果不一致，会产生段错误
*/
// 封装一个函数：如果实参是>=0 调用成功
//               如果实参是<0  调用失败
// 传统C语言：通过返回值赋予特殊含义判断成功和失败
int fun(int n)
{
	if (n >= 0)
		return 0;
	else
		return -1;
}

// C++新的做法
int otherfun(int n)
{
	if (n >= 0) // 成功
		return 0;
	else		  // 失败
		throw -1; // 抛出整型异常(-1是个整数)
}

int main()
{
	// 调用otherfun--》仿照以前C语言判断返回值的写法
	// 编译没有错误：运行的时候段错误了
	// 原因：C++规定函数使用throw抛出异常，你必须使用try-catch语句捕捉处理异常
	// int ret=otherfun(-666);
	// if(ret==-1)
	//{
	// cout<<"函数调用失败了";
	// return -1;
	//}

	// 正确的写法
	try
	{
		otherfun(-666); // 失败才执行catch块
						// otherfun(666);    //成功不执行catch块
	}
	catch (int n) // 由于otherfun抛出来的是整型异常，因此catch捕捉的异常类型就是int
	{
		cout << "otherfun调用失败,参数n的值是: " << n << endl;
		return -1;
	}

	cout << "otherfun调用成功了，主程序继续往后执行" << endl;
	return 0;
}